package com.tledu.zyf.controller;

import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.multipart.MultipartFile;

import com.tledu.zyf.exception.SSMException;
import com.tledu.zyf.service.IAttachmentService;

/**
 * 使用Controller注解之后,在方法上可以通过return的jsp或者html页面的名字,通过视图解析器,就能跳转到指定页面
 * 如果没有Controller注解,这个类中的方法是不会被请求过去的 所对应的层也是controller层,表现层
 * 
 * @author yingfing
 * @date 2020年10月16日 @time 下午9:46:03
 */
@Controller
/**
 * 是Spring Web应用中最常用到的注解之一,这个注解会将http请求映射到MVC和Controller控制器的处理方法上
 * 
 * @author yingfing
 * @date 2020年10月16日 @time 下午9:46:38
 */
@RequestMapping("/attach")
public class AttachmentController {

	/**
	 * 从spring容器中,找到一个和这个属性数据类型匹配的实例化对象注入进来
	 * 
	 * 默认使用byType,根据类型匹配,如果只能找到一个这个数据类型的对象的时候,肯定没问题,但是如果找到了多个同一个类型的对象的时候,
	 * 就会自动更改为byName来进行匹配,根据set方法对应的参数列表的局部变量名来匹配
	 */
	@Autowired
	private IAttachmentService attachmentService;

	@RequestMapping("list")
	public String list(Model model) {
		model.addAttribute("attachments", attachmentService.list());
		return "attach/list";
	}

	@RequestMapping("/add")
	public String add() {
		return "attach/add";
	}

	@RequestMapping(value = "/add", method = RequestMethod.POST)
	public String add(MultipartFile file, HttpServletRequest request) throws SSMException {
		// 获取文件全路径
		String filePath = request.getServletContext().getRealPath("/resources/upload");
		attachmentService.add(file, filePath);
		return "redirect:/attach/list";
	}

	@RequestMapping("/delete/{id}")
	public String delete(@PathVariable int id, HttpServletRequest request) {
		// 获取文件全路径
		String filePath = request.getServletContext().getRealPath("/resources/upload");
		attachmentService.delete(id, filePath);
		return "redirect:/attach/list";
	}
}
